const axios = require('axios');

// 配置
const API_URL = 'http://localhost:3000';
const username = 'testuser'; // 替换为您的测试用户名
const password = 'password123'; // 替换为您的测试密码

// 测试注册功能
async function testRegister() {
  try {
    console.log(`尝试注册用户: ${username}`);
    const response = await axios.post(`${API_URL}/users`, {
      username,
      email: `${username}@example.com`,
      password,
    });
    console.log('注册成功:', response.data);
    return true;
  } catch (error) {
    if (error.response && error.response.status === 409) {
      console.log('用户已存在，继续测试登录');
      return true;
    }
    console.error('注册失败:');
    if (error.response) {
      console.error('状态码:', error.response.status);
      console.error('响应数据:', error.response.data);
    } else if (error.request) {
      console.error('请求已发送但未收到响应。服务器可能未运行。');
      console.error(error.message);
    } else {
      console.error('请求设置时出错:', error.message);
    }
    return false;
  }
}

// 测试登录功能
async function testLogin() {
  try {
    console.log(`尝试使用用户名: ${username}, 密码: ${password} 登录`);
    const response = await axios.post(`${API_URL}/auth/login`, {
      username,
      password,
    });
    console.log('登录成功:', response.data);
    return response.data;
  } catch (error) {
    console.error('登录失败:');
    if (error.response) {
      console.error('状态码:', error.response.status);
      console.error('响应数据:', error.response.data);
    } else if (error.request) {
      console.error('请求已发送但未收到响应。服务器可能未运行。');
      console.error(error.message);
    } else {
      console.error('请求设置时出错:', error.message);
    }
    return null;
  }
}

// 测试获取用户信息
async function testGetProfile(token) {
  try {
    console.log('尝试获取用户信息');
    const response = await axios.get(`${API_URL}/users/profile`, {
      headers: {
        Authorization: `Bearer ${token}`,
      },
    });
    console.log('获取用户信息成功:', response.data);
  } catch (error) {
    console.error('获取用户信息失败:');
    if (error.response) {
      console.error('状态码:', error.response.status);
      console.error('响应数据:', error.response.data);
    } else if (error.request) {
      console.error('请求已发送但未收到响应');
      console.error(error.message);
    } else {
      console.error('请求设置时出错:', error.message);
    }
  }
}

// 运行测试
async function runTests() {
  console.log('开始测试...');
  console.log(`API URL: ${API_URL}`);
  
  // 首先检查服务器是否运行
  try {
    await axios.get(API_URL);
    console.log('服务器正在运行');
  } catch (error) {
    if (error.code === 'ECONNREFUSED') {
      console.error('无法连接到服务器。请确保服务器正在运行。');
      return;
    }
  }
  
  const registerSuccess = await testRegister();
  if (!registerSuccess) {
    console.log('注册测试失败，停止后续测试');
    return;
  }
  
  const loginResult = await testLogin();
  if (loginResult && loginResult.access_token) {
    await testGetProfile(loginResult.access_token);
  } else {
    console.log('登录测试失败，停止后续测试');
  }
}

runTests().catch(error => {
  console.error('测试过程中发生未捕获的错误:');
  console.error(error);
}); 